package com.alisls.demo.sso.server.controller;

import com.alisls.demo.sso.server.util.TokenUtil;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpSession;
import java.util.UUID;

/**
 * 描述
 *
 * @author Ke Wang
 */
@Controller
public class LoginController {

    /**
     * 检查是否已经登录
     * @param redirect 请求源重定向地址
     * @param model 模型
     * @param httpSession 会话
     * @return 结果
     */
    @RequestMapping("/loginCheck")
    public String loginCheck(String redirect, Model model, HttpSession httpSession) {
        // 判断是否有全局的会话token
        String token = (String) httpSession.getAttribute("token");
        if (token == null) {
            // 没有全局会话token，跳转到登录界面
            model.addAttribute("redirect", redirect);
            return "login";
        } else {
            // 已经登录，有全局会话token
            return "redirect:" + redirect + "?token=" + token;
        }
    }

    /**
     * 执行登录
     * @param username 用户名
     * @param password 密码
     * @param redirect 重定向地址
     * @param httpSession Session
     * @param model 模型
     * @return 登录结果
     */
    @RequestMapping("/login")
    public String login(String username, String password, String redirect, HttpSession httpSession, Model model) {
        System.out.println("进入登录方法");
        // 进行用户名密码验证
        if ("wangke".equalsIgnoreCase(username) && "wangke".equalsIgnoreCase(password)) {
            System.out.println("用户名密码校验通过");
            // 1. 生成Tokens
            String token = UUID.randomUUID().toString();
            // 2. 创建全局会话，存入令牌
            httpSession.setAttribute("token", token);
            System.out.println("创建全局会话，保存Token");
            // 3. 久化令牌持
            TokenUtil.save(token, null);
            System.out.println("持久化Token对象（逻辑有问题，待修改）");
            // 4. 重定向redirect并带上token
            return "redirect:" + redirect + "?token=" + token;
        }

        System.out.println("用户名密码校验失败，再次跳转到登录页面");
        model.addAttribute("redirect", redirect);
        return "login";
    }

}
